package com.example.d6_homework.homework01;

import java.lang.reflect.Method;
import java.util.ArrayList;

public class Test {
    public static void main(String[] args) throws Exception {
        // 需求：在这个泛型为Integer的ArrayList中存放一个String类型的对象
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);

        // 1.获取list集合的字节码对象
        Class c = list.getClass();

        // 2.获取ArrayList类中声明的add方法,该方法接受一个Object类型的参数
        Method add = c.getDeclaredMethod("add", Object.class);

        // 3.通过反射调用add方法,向list中添加一个String类型的对象
        // 这里利用了反射的特性,绕过了泛型的编译时类型检查
        add.invoke(list, "hello");

        // 输出list的内容,会看到包含不同类型的元素
        System.out.println(list);
    }
}
